// frontend/src/api/index.js
import axios from 'axios';

// 创建axios实例
const api = axios.create({
  baseURL: process.env.VUE_APP_API_URL || 'http://localhost:8000/api',
  timeout: 120000, // 120秒超时
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    // 可以在这里添加认证token等
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    // 处理错误响应
    let errorMessage = '未知错误';
    if (error.response) {
      // 服务器返回错误
      console.error('API错误:', error.response.data);
      errorMessage = `服务器错误: ${JSON.stringify(error.response.data)}`;
    } else if (error.request) {
      // 请求发送但没有收到响应
      console.error('API请求超时或网络错误');
      errorMessage = '请求超时或网络错误';
    } else {
      // 请求设置时发生错误
      console.error('API请求错误:', error.message);
      errorMessage = `请求设置错误: ${error.message}`;
    }
    // 可以在这里触发全局错误通知，与Vuex关联
    // 例如：store.dispatch('showNotification', { message: errorMessage, type: 'error' });
    return Promise.reject(error);
  }
);

// 封装API请求函数，便于管理和维护
const apiService = {
  // 仪表盘相关
  getDashboardStats() {
    return api.get('/dashboard/stats');
  },

  getRecentActivities(limit = 10) {
    return api.get(`/dashboard/activities?limit=${limit}`);
  },

  // 需求优化相关
  optimizeRequirements(content, title = '需求优化') {
    const params = { content, title };
    return api.post('/requirements/optimize', params);
  },

  optimizeRequirementsFromFile(formData) {
    return api.post('/requirements/optimize-file', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  // 测试用例相关
  generateTestCases(content, title = '测试用例生成') {
    const params = { content, title };
    return api.post('/test-cases/generate', params);
  },

  generateTestCasesFromFile(formData) {
    return api.post('/test-cases/generate-file', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  getTestCase(id) {
    return api.get(`/test-cases/${id}`);
  }
};

export default apiService;